package com.xydtech.common.unipush.service.impl;

import com.xydtech.common.unipush.service.IUniPushService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import javax.jms.Destination;

/**
 * UniPush消息推送服务
 */
@Service
public class IUniPushServiceImpl implements IUniPushService {
    private final static Logger logger = LogManager.getLogger(IUniPushService.class);

    @Value("${unipush.packageName}")
    private String packageName;

    //@Autowired
    //PushApi pushApi;
    //@Autowired
    //UserApi userApi;
    @Resource
    private JmsMessagingTemplate jmsMessagingTemplate;
    @Resource
    private Destination appMessageQueue;

    ///**
    // * 绑定用户ID和设备号之间的关系，用作消息推送使用
    // * @param uniPushBindAlias
    // * @return com.alibaba.fastjson.JSONObject
    // * @exception
    // * @author Daniel
    // * @date 2022-3-16 14:30:18
    // */
    //@Override
    //public ApiResult<Void> bindAlias(UniPushBindAlias uniPushBindAlias) {
    //    /**
    //     * 组装unipush要求的格式
    //     */
    //    String userId = uniPushBindAlias.getUserId();
    //    String clientId = uniPushBindAlias.getClientId();
    //
    //    logger.info("UNI-PUSH开始绑定用户：" + userId + ",ClientId：" + clientId);
    //    CidAliasListDTO.CidAlias cidAlias = new CidAliasListDTO.CidAlias(clientId, userId);
    //    CidAliasListDTO cidAliasListDTO = new CidAliasListDTO();
    //    cidAliasListDTO.add(cidAlias);
    //
    //    ApiResult<Void> bindResult = userApi.bindAlias(cidAliasListDTO);
    //    logger.info("UNI-PUSH结束绑定用户：" + userId + ",ClientId：" + clientId + ",绑定结果为：" + JSONObject.toJSONString(bindResult));
    //
    //    return bindResult;
    //}
    //
    ///**
    // * 解绑用户ID和设备号之间的关系
    // * @param uniPushBindAlias
    // * @return com.alibaba.fastjson.JSONObject
    // * @exception
    // * @author Daniel
    // * @date 2022-3-16 14:31:03
    // */
    //@Override
    //public ApiResult<Void> unBindAlias(UniPushBindAlias uniPushBindAlias) {
    //    /**
    //     * 组装unipush要求的格式
    //     */
    //    String userId = uniPushBindAlias.getUserId();
    //    String clientId = uniPushBindAlias.getClientId();
    //
    //    logger.info("UNI-PUSH开始解绑用户：" + userId + ",ClientId：" + clientId);
    //    CidAliasListDTO.CidAlias cidAlias = new CidAliasListDTO.CidAlias(clientId, userId);
    //    CidAliasListDTO cidAliasListDTO = new CidAliasListDTO();
    //    cidAliasListDTO.add(cidAlias);
    //
    //    ApiResult<Void> unBindResult = userApi.batchUnbindAlias(cidAliasListDTO);
    //    logger.info("UNI-PUSH结束解绑用户：" + userId + ",ClientId：" + clientId + ",解绑结果为：" + JSONObject.toJSONString(unBindResult));
    //
    //    return unBindResult;
    //}
    //
    ///**
    // * 发送APP推送消息进入消息队列，等待消费者处理发送APP消息推送
    // * @param
    // * @return com.alibaba.fastjson.JSONObject
    // * @exception
    // * @author Daniel
    // * @date 2022/3/17 10:09
    // */
    //@Override
    //public void sendAppMessageIntoActiveMQQueues(String receiverAlias, String title, String content, Map<String, Object> pushParams) {
    //    UniPushMessageContent messageContent = new UniPushMessageContent(receiverAlias, title, content, pushParams);
    //    jmsMessagingTemplate.convertAndSend(appMessageQueue, JSONObject.toJSONString(messageContent));
    //}
    //
    ///**
    // * 发送APP推送消息
    // * @param uniPushMessageContent
    // * @return com.alibaba.fastjson.JSONObject
    // * @exception
    // * @author Daniel
    // * @date 2022-3-16 14:32:04
    // */
    //@Override
    //public JSONObject sendAppMessageToSignle(UniPushMessageContent uniPushMessageContent) {
    //    JSONObject result = new JSONObject();
    //    result.put("code", -1);
    //
    //    //获取传递的自定义参数
    //    String payloadStr = JSONObject.toJSONString(uniPushMessageContent.getPushParams());
    //    String title = uniPushMessageContent.getTitle();
    //    String content = uniPushMessageContent.getContent();
    //    String intentStr = "intent:#Intent;launchFlags=0x04000000;action=android.intent.action.oppopush;component=" + packageName + "/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=" + title + ";S.content=" + content + ";S.payload=" + payloadStr + ";end";
    //
    //    //根据cid进行单推
    //    PushDTO<Audience> pushDTO = new PushDTO<Audience>();
    //    // 设置推送参数
    //    pushDTO.setRequestId(System.currentTimeMillis() + "");
    //    /**** 设置个推通道参数 *****/
    //    PushMessage pushMessage = new PushMessage();
    //    pushDTO.setPushMessage(pushMessage);
    //    GTNotification notification = new GTNotification();
    //    pushMessage.setNotification(notification);
    //    notification.setTitle(title);
    //    notification.setBody(content);
    //    notification.setBigText(content);
    //    notification.setClickType("intent");
    //    notification.setIntent(intentStr);
    //    notification.setBadgeAddNum("1");
    //
    //    /**** 设置个推通道参数，更多参数请查看文档或对象源码 *****/
    //    Settings settings = new Settings();
    //    pushDTO.setSettings(settings);
    //    settings.setTtl(3600000);
    //
    //    //设置策略1: 表示该消息在用户在线时推送个推通道，用户离线时推送厂商通道;
    //    //2: 表示该消息只通过厂商通道策略下发，不考虑用户是否在线;
    //    //3: 表示该消息只通过个推通道下发，不考虑用户是否在线；
    //    //4: 表示该消息优先从厂商通道下发，若消息内容在厂商通道代发失败后会从个推通道下发
    //    Strategy strategy = new Strategy();
    //    strategy.setDef(1);
    //    settings.setStrategy(strategy);
    //
    //    /**** 设置厂商相关参数 ****/
    //    PushChannel pushChannel = new PushChannel();
    //    pushDTO.setPushChannel(pushChannel);
    //
    //    //*配置安卓通道的参数*//*
    //    AndroidDTO androidDTO = new AndroidDTO();
    //    pushChannel.setAndroid(androidDTO);
    //    Ups ups = new Ups();
    //    androidDTO.setUps(ups);
    //    ThirdNotification thirdNotification = new ThirdNotification();
    //    ups.setNotification(thirdNotification);
    //    thirdNotification.setTitle(title);
    //    thirdNotification.setBody(content);
    //    thirdNotification.setClickType("intent");
    //    thirdNotification.setIntent(intentStr);
    //
    //    //垃圾华为需要单独设置他的角标
    //    ups.setOptions(getHWOptionMap());
    //    /*配置安卓厂商参数结束，更多参数请查看文档或对象源码*/
    //
    //    /*设置ios厂商参数--------先注释掉，后期有可能做IOS端的，所以到时候还得用*/
    //    /*IosDTO iosDTO = new IosDTO();
    //    pushChannel.setIos(iosDTO);
    //    // 相同的collapseId会覆盖之前的消息
    //    iosDTO.setApnsCollapseId("xxx");
    //    Aps aps = new Aps();
    //    iosDTO.setAps(aps);
    //    Alert alert = new Alert();
    //    aps.setAlert(alert);
    //    alert.setTitle("ios title");
    //    alert.setBody("ios body");*/
    //    /*设置ios厂商参数结束，更多参数请查看文档或对象源码*/
    //
    //    /*设置接收人信息*/
    //    Audience audience = new Audience();
    //    pushDTO.setAudience(audience);
    //    audience.addAlias(uniPushMessageContent.getReceiverAlias());
    //    /*设置接收人信息结束*/
    //    /**** 设置厂商相关参数，更多参数请查看文档或对象源码 ****/
    //
    //    // 根据别名单推
    //    ApiResult<Map<String, Map<String, String>>> apiResult = pushApi.pushToSingleByAlias(pushDTO);
    //    if (apiResult.isSuccess()) {
    //        result.put("code", 0);
    //        result.put("msg", apiResult.getMsg());
    //    } else {
    //        // failed
    //        result.put("msg", apiResult.getMsg());
    //        System.out.println("code:" + apiResult.getCode() + ", msg: " + apiResult.getMsg());
    //    }
    //    logger.info("UNI-PUSH推送消息，消息内容为：" + JSONObject.toJSONString(uniPushMessageContent) + "，推送结果为：" + JSONObject.toJSONString(apiResult));
    //    return result;
    //}
    //
    ///**
    // * 获取华为角标参数
    // * @param
    // * @return java.util.Map<java.lang.String, java.lang.Object>
    // * @exception
    // * @author Daniel
    // * @date 2022/1/11 15:12
    // */
    //private Map<String, Map<String, Object>> getHWOptionMap() {
    //    Map<String, Map<String, Object>> options = new HashMap<>();
    //    Map<String, Object> hwMap = new HashMap<>();
    //    hwMap.put("/message/android/notification/badge/class", "io.dcloud.PandoraEntry");
    //    hwMap.put("/message/android/notification/badge/add_num", 1);
    //    options.put("HW", hwMap);
    //    return options;
    //}
}
